package com.example.demo.controller;

import com.wf.captcha.ArithmeticCaptcha;
import com.wf.captcha.ChineseCaptcha;
import com.wf.captcha.GifCaptcha;
import com.wf.captcha.SpecCaptcha;
import com.wf.captcha.base.Captcha;
import io.swagger.annotations.Api;
import lombok.AllArgsConstructor;
import org.springframework.validation.annotation.Validated;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;

import javax.servlet.http.HttpServletResponse;
import java.io.IOException;

/**
 * fileName:VerificationCodeController
 * description: 验证码
 * author: LJV
 * createTime:2022/4/28 11:18
 * version:1.0.0
 */
@Api(tags = "(Code)")
@Validated
@RestController
@AllArgsConstructor
@RequestMapping("code")
public class VerificationCodeController {

    /**
     * png类型
     *
     * @param response
     * @throws IOException
     */
    @RequestMapping("/captchaPng")
    public void captchaPng(HttpServletResponse response) throws IOException {
        // png类型
        SpecCaptcha captcha = new SpecCaptcha(130, 48);
        String text = captcha.text();// 获取验证码的字符
        char[] chars = captcha.textChar();// 获取验证码的字符数组
        System.out.println("验证码：" + text);
        System.out.println(chars);
        // 输出验证码
        captcha.out(response.getOutputStream());
    }

    /**
     * gif类型
     *
     * @param response
     * @throws IOException
     */
    @RequestMapping("/captchaGif")
    public void captchaGif(HttpServletResponse response) throws IOException {
        // 三个参数分别为宽、高、位数
        GifCaptcha gifCaptcha = new GifCaptcha(100, 48, 4);
        // 设置类型：字母数字混合
        gifCaptcha.setCharType(Captcha.TYPE_DEFAULT);
        //获取验证码
        String text = gifCaptcha.text();
        System.out.println("验证码为：" + text);
        // 输出验证码
        gifCaptcha.out(response.getOutputStream());
    }

    /**
     * 中文类型
     * @param response
     * @throws IOException
     */
    @RequestMapping("/captchaZ")
    public void captchaZ(HttpServletResponse response) throws IOException {
        // 中文类型
        ChineseCaptcha captcha = new ChineseCaptcha(130, 48);
        //获取验证码
        String text = captcha.text();
        System.out.println("验证码为：" + text);
        // 输出验证码
        captcha.out(response.getOutputStream());
    }

    /**
     * 算术类型
     * @param response
     * @throws IOException
     */
    @RequestMapping("/captchaMath")
    public void captchaMath(HttpServletResponse response) throws IOException {
        // 算术类型
        ArithmeticCaptcha captcha = new ArithmeticCaptcha(130, 48);
        captcha.setLen(3);  // 几位数运算，默认是两位
        captcha.getArithmeticString();  // 获取运算的公式
        String text = captcha.text();// 获取运算的结果
        System.out.println("计算结果为："+text);
        // 输出验证码
        captcha.out(response.getOutputStream());
    }

}
